home *** CD-ROM | disk | FTP | other *** search
/ Aminet 31 / Aminet 31 (1999)(Schatztruhe)[!][Jun 1999].iso / Aminet / docs / mags / saku28d2.lha / Teksti / Pelipuu.txt < prev    next >
Text File  |  1999-03-09  |  10KB  |  298 lines

  1. 2
  2. 1
  3. 2 Numeropeli.IFF 0 0
  4. 3 Pelipuu.IFF 0 0*
  5.  
  6. {3                             Pelipuuta ilman muuta
  7. {3                             ---------------------
  8.  
  9.                                  Petri Keckman
  10.  
  11.  
  12. Nyt on hyvä peli! Älkää jättäkö sitä kokeilematta aikaisempien kokemustenne  pe-
  13. rusteella "peleistäni".
  14.  
  15. Yli kymmenen vuoden tauon jälkeen päätin ryhtyä  käyttämään  Pascal-ohjelmointi-
  16. kieltä. Voi miksi olen yrittänytkään koskaan käyttää mitään muuta? Se on Amigal-
  17. la helppoa ja halpaa PCQ-freeware-kääntäjällä - sen jälkeen kun systeemin  saan-
  18. nut asetettua ja sitä on oppinut käyttämään... tai no jaa, melkoista  pilkunvii-
  19. lausta se ohjelmointi aina on.
  20.  
  21. Pascal oli hallitseva opetuskieli  yliopistomaailmassa  70-  ja  vielä  pitkälti
  22. 80-luvulla. Pascalin syntaksissa kaikki muuttujat ja tyypit on esiteltävä lohko-
  23. jen (ts. ohjelmien tai aliohjelmien) alussa, mikä aluksi saattaa  tuntua  hanka-
  24. lalta mutta kuitenkin helpottaa ohjelmointia ja  karsii  huolimattomuusvirheitä,
  25. kun ne eivät mene edes kääntäjästä läpi...  tai  niiden  ei  pitäisi;  vaikuttaa
  26. siltä, että esimerkiksi Integer- ja Real-tyyppisiä muuttujia saa PCQ:ssa käyttää
  27. samoissa lausekkeissa, jolloin saattaa tulla virheitä, kun Real-luvun  tallennus
  28. tulkitaan Integeriksi.
  29.  
  30. Pascal suosii - ellei peräti vaadi - rakenteellista ohjelmointia,  jossa  ohjel-
  31. moitava ongelma on jaettu selkeisiin aliohjelmiin.  Se  muistuttaa  paljolti  C-
  32. kieltä. Kuten yleensäkin ohjelmointikielillä, silläkin voi tehdä tietysti vaikka
  33. mitä. Eroja on lähinnä syntaksin pilkkusäännöissä.
  34.  
  35. Sillä on tullut suoritettua perus- ja aineopintojen labroja - suoritettua,  mut-
  36. tei palautettua. Olin niin kypsynyt yliopiston  arvomaailmaan,  jossa  tärkeintä
  37. oli kerätä suorituspisteitä kopioimalla laskuharjoituksia,  että  menin  toiseen
  38. äärimmäisyyteen: opiskelin omaksi huvikseni ja tiedokseni ja jätin  merkkaamatta
  39. laskuharjoitukset ja palauttamatta labrat. Helvettiäkö minun  ohjelmointiharras-
  40. tukseni muille kuului?
  41.  
  42. Ohjelmat-hakemistosta löytyvän numeropeli-ohjelman eräs  versio  tuli  kuitenkin
  43. aikoinaan palautettua "Tietorakenteet"-kurssiin kuuluvana harjoitustyönä, joskus
  44. vuonna 1987, silloin kun vielä uskalsin  kuvitella  osaavani  ohjelmoida.  Siinä
  45. harjoiteltiin pelipuun käsittelyä. Pelipuu on  tietorakenne,  johon  rakennetaan
  46. kustakin pelitilanteesta vaihtoehtoiset jatkotilanteet ja valitaan paras mahdol-
  47. linen siirto. Pelilaudan tilannetta kuvaa arvofunktio, joka on  pelipuun  solmun
  48. arvo. Koko pelilaudan tilannetta ei siis tallenneta solmun  arvoksi,  vaan  vain
  49. arvofunktion arvo. Pelipuuta rakennettaessa täytyy  pelilaudan  tilannekin  olla
  50. kuitenkin selvillä, jotta sitä päästään rakentamaan. Siksi pelipuun solmuun tal-
  51. lennetaan myös tehdyn siirron sarake- tai rivi-indeksi.
  52.  
  53. Numeropelin idea on yksinkertainen: pelaajat  nostavat  vuorotellen  numeroituja
  54. laattoja, toinen rivittäin, siltä riviltä, jolta toinen (sarakkeittain  pelaava)
  55. oli poistanut laatan. Viimeksi poistetun laatan paikalle siirretään tähtilaatta.
  56. Laattojen numerot lasketaan yhteen. Suuremman summan kerännyt on  voittanut  ti-
  57. lanteessa, jossa vuorossa oleva ei pääse enää jatkamaan, kun laatat ovat  loppu-
  58. neet. Tähän peliin liittyvä pelitilannetta kuvaava arvofunktio, jonka pelipuual-
  59. goritmi tarvitsee, on siis äärimmäisen yksinkertainen: kerättyjen laattojen sum-
  60. masta vähennetään vastustajan keräämien laattojen summa.
  61.  
  62.  
  63.  
  64. {D                                                                     ---------->
  65.  
  66. {1                                              Algoritmi on ajanut pelaajan tuka-
  67. {1                                              laan asemaan ja johtaa 40-27.  Pe-
  68. {1                                              laajalla nostettavina laatat  -11,
  69. {1                                              -12 tai -11.
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94. {1                                                                     ---------->
  95.  
  96. {1                                                Pelipuun yksi haara kolme  siir-
  97. {1                                                toa eteenpäin. Algoritmissa tal-
  98. {1                                                lennusmuoto on pinotetut jonot.
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124. {1                                                                     ---------->
  125. Alkuperäinen  versio  kaukaisilta  opiskeluajoiltani  tulosti   merkkigrafiikkaa
  126. käskyrivi-ikkunaan, josta alla huvin vuoksi esimerkkiajon alkua ja loppua.  Kone
  127. aloitti poistamalla täydeltä pelilaudalta laatan riviltä 3 sarakkeelta 2.
  128.  
  129. 8.H1:OHJELMOINTI/pcq12d> omat/numeropeli
  130.  
  131. *************************************************************
  132. *   JOS HALUAT MUUTTAA JONKIN ALLAOLEVAN ASETUKSEN ARVOA,   *
  133. *   NIIN SYOTA VASTAAVA NUMERO 1..7.                        *
  134. *************************************************************
  135.     1. KONE ALOITTAA.
  136.     2. KONE PELAA SARAKKEITTAIN.
  137.     3. OHJELMA ARPOO LAATOILLE PAIKAT JA ARVOT 
  138.     4. LAATTOJEN PIENIN ARVO = -8
  139.     5. LAATTOJEN MAKSIMI ARVO = 8
  140.     6. OHJELMA TUTKII 6 SIIRTOA ETEENPAIN.
  141.     7. KONE PELAA KAYTTAJAA VASTAAN.
  142.  
  143.        JOS HALUAT MUUTTAA PELIKENTAN KOKOA 4x4,
  144.        NIIN MUUTA OHJELMASTA VAKION maxind ARVOA.
  145.  
  146. *************************************************************
  147. *   SYOTA 8 KUN HALUAT LOPETTAA KOKO OHJELMAN TAI           *
  148. *   SYOTA 0 KUN OLET VALMIS PELAAMAAN.                      *
  149. *************************************************************
  150.     0. ALETAAN PELAAMAAN.
  151.     8. LOPETETAAN PELAAMINEN.
  152.  
  153. SYOTA LUKU 0..8   ? 
  154. 0
  155.  SARAKE=1   2   3   4
  156. RIVI  ::::::::::::::::: PELITILANNE:
  157.   1   :  1: -1:  7:  4: KONE  =0
  158.       ::::::::::::::::: PELAAJA=0
  159.   2   : -1: -8: -5:  1:
  160.       :::::::::::::::::
  161.   3   :  0:  7:  6: -7:
  162.       :::::::::::::::::
  163.   4   : -8: -1:  0:  4:
  164.       :::::::::::::::::
  165.  
  166.  
  167.  SARAKE=1   2   3   4
  168. RIVI  ::::::::::::::::: PELITILANNE:
  169.   1   :  1: -1:  7:  4: KONE  =7
  170.       ::::::::::::::::: PELAAJA=0
  171.   2   : -1: -8: -5:  1:
  172.       :::::::::::::::::
  173.   3   :  0: * :  6: -7:
  174.       :::::::::::::::::
  175.   4   : -8: -1:  0:  4:
  176.       :::::::::::::::::
  177.  
  178. SYOTA POISTETTAVAN LAATAN SARAKEINDEKSI VALILTA 1..4: 
  179. 3
  180.  
  181.  
  182.  
  183.  
  184.  
  185.  SARAKE=1   2   3   4
  186. RIVI  ::::::::::::::::: PELITILANNE:
  187.   1   :  1: -1:  7:  4: KONE  =7
  188.       ::::::::::::::::: PELAAJA=6
  189.   2   : -1: -8: -5:  1:
  190.       :::::::::::::::::
  191.   3   :  0:   : * : -7:
  192.       :::::::::::::::::
  193.   4   : -8: -1:  0:  4:
  194.       :::::::::::::::::
  195.  
  196.  
  197.  SARAKE=1   2   3   4
  198. RIVI  ::::::::::::::::: PELITILANNE:
  199.   1   :  1: -1: * :  4: KONE  =14
  200.       ::::::::::::::::: PELAAJA=6
  201.   2   : -1: -8: -5:  1:
  202.       :::::::::::::::::
  203.   3   :  0:   :   : -7:
  204.       :::::::::::::::::
  205.   4   : -8: -1:  0:  4:
  206.       :::::::::::::::::
  207.  
  208. SYOTA POISTETTAVAN LAATAN SARAKEINDEKSI VALILTA 1..4: 
  209. 4
  210.  
  211. ..jne. jne...
  212.  
  213.  
  214.  
  215.  SARAKE=1   2   3   4
  216. RIVI  ::::::::::::::::: PELITILANNE:
  217.   1   :  1: -1:   :   : KONE  =13
  218.       ::::::::::::::::: PELAAJA=-14
  219.   2   :   :   :   :   :
  220.       :::::::::::::::::
  221.   3   :   :   :   :   :
  222.       :::::::::::::::::
  223.   4   : * :   :   :   :
  224.       :::::::::::::::::
  225.  
  226.  
  227.  SARAKE=1   2   3   4
  228. RIVI  ::::::::::::::::: PELITILANNE:
  229.   1   : * : -1:   :   : KONE  =14
  230.       ::::::::::::::::: PELAAJA=-14
  231.   2   :   :   :   :   :
  232.       :::::::::::::::::
  233.   3   :   :   :   :   :
  234.       :::::::::::::::::
  235.   4   :   :   :   :   :
  236.       :::::::::::::::::
  237.  
  238. SYOTA POISTETTAVAN LAATAN SARAKEINDEKSI VALILTA 1..4: 
  239. 2
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  SARAKE=1   2   3   4
  246. RIVI  ::::::::::::::::: PELITILANNE:
  247.   1   :   : * :   :   : KONE  =14
  248.       ::::::::::::::::: PELAAJA=-15
  249.   2   :   :   :   :   :
  250.       :::::::::::::::::
  251.   3   :   :   :   :   :
  252.       :::::::::::::::::
  253.   4   :   :   :   :   :
  254.       :::::::::::::::::
  255.  
  256. KONE EI VOI TEHDA ENAA SIIRTOA.
  257. HAVISIT TALLA KERTAA.
  258.  
  259. Vaikka peli on yksinkertainen - tai juuri sen takia - on se ihmiselle  kuitenkin
  260. sen verran vaikeaa, etten ole Amigaani kertaakaan voittanut vähänkään  isommilla
  261. vaikeustasoilla. Tosin en jaksakaan yleensä miettiä kuin korkeintaan kaksi siir-
  262. toa eteenpäin - yleensä näpäytän hiirellä sitä rivin suurinta laattaa.
  263.  
  264. Kuinka kone sitten tarkemmin ottaen tekee siirtonsa? Samalla tavalla kuin  ihmi-
  265. nen yrittää miettiä: jos nostan tuon laatan, niin se nostaa tuon laatan, jolloin
  266. minun on nostettava jokin noista, jolloin kone pääsee kuitenkin  nostamaan  tuon
  267. laa